package cn.flightcloud.auth.config.oauth;

import java.util.Map;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;

public class JwtAccessToken extends JwtAccessTokenConverter {
	/**
	 * 生成token
	 * 
	 * @param accessToken
	 * @param authentication
	 * @return
	 */
	@Override
	public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
		DefaultOAuth2AccessToken defaultOAuth2AccessToken = new DefaultOAuth2AccessToken(accessToken);

		UserDetails userDetails = (UserDetails) authentication.getPrincipal();
		// 将用户信息添加到token额外信息中
		defaultOAuth2AccessToken.getAdditionalInformation().put("userInfo", userDetails);

		return super.enhance(defaultOAuth2AccessToken, authentication);
	}

	/**
	 * 解析token
	 * 
	 * @param value
	 * @param map
	 * @return
	 */
	@Override
	public OAuth2AccessToken extractAccessToken(String value, Map<String, ?> map) {
		OAuth2AccessToken oauth2AccessToken = super.extractAccessToken(value, map);
		return oauth2AccessToken;
	}

//	private void convertData(OAuth2AccessToken accessToken, Map<String, ?> map) {
//		accessToken.getAdditionalInformation().put("userInfo", convertUserData(map.get(Constant.USER_INFO)));
//
//	}

//	private BaseUser convertUserData(Object map) {
//		String json = JsonUtils.deserializer(map);
//		BaseUser user = JsonUtils.serializable(json, BaseUser.class);
//		return user;
//	}
}
